PDA

View Full Version : تعویض نام ستون



azadeh_1510
یک شنبه 09 تیر 1392, 13:11 عصر
با سلام
من این SP رو برای تعویض نام ستون نوشتم چرا درست کار نمیکنه؟
CREATE PROCEDURE [dbo].[sp_RenameColumn]
AS
BEGIN
EXEC sp_rename 'dbo.Sheet.[کد پرسنلي ]', 'Code', 'COLUMN';

END
GO

hossein_h62
یک شنبه 09 تیر 1392, 13:47 عصر
سلام
مشکل همون کد پرسنلی هستش که فارسی نوشتید! باید این قسمت از پارامتر رو بصورت متغیر بهش پاس بدید.

azadeh_1510
یک شنبه 09 تیر 1392, 13:50 عصر
ببخشید من جدولی که دارم اسمش خودش فارسی هست و باید تغییر نام بدهم به همون :Code
من توضیحتونو متوجه نمیشم چطور باید انجام بدم؟

hossein_h62
یک شنبه 09 تیر 1392, 13:55 عصر
این کد رو چک کنید :
declare @h nvarchar(50)
declare @m varchar(50)

set @m = 'dbo.Sheet.'
set @h = (
select [COLUMN NAME] from (SELECT [name] AS [Column name]
FROM syscolumns
WHERE id = (SELECT id
FROM sysobjects
WHERE type = 'U'
AND [NAME] = 'Sheet'))X
Where [Column name] like N'کد پرسنلی'
)

declare @aa nvarchar(255)
set @aa = @m+@h

EXEC sp_rename @aa, 'Code', 'COLUMN';

azadeh_1510
یک شنبه 09 تیر 1392, 14:03 عصر
موقع ذخیره کردن SP مشکلی نداره اما موقع اجرای SP این پیام خطا رو میده:
Msg 15248, Level 11, State 1, Procedure sp_rename, Line 215
Either the parameter @objname is ambiguous or the claimed @objtype (COLUMN) is wrong.

hossein_h62
یک شنبه 09 تیر 1392, 14:15 عصر
من کوئری رو چک کردم مشکلی نداره، دقت کنید اسم فارسی فیلدتون رو در کوئری عینا مشابه بزنید. اسم فیلدی که در خط شماره 12 کوئری پست 4 میزنید مطابق اسم فیلدتون در جدول باشه.

azadeh_1510
یک شنبه 09 تیر 1392, 14:24 عصر
فقط خط 12 باید اینجوری بشه؟
خط 6 رو تغییر ندم؟

hossein_h62
یک شنبه 09 تیر 1392, 14:31 عصر
نه، خط 4 و 11 اسم جدولتون باشه و خط 12 هم اسم فیلد.

azadeh_1510
یک شنبه 09 تیر 1392, 14:44 عصر
حالا این پیام رو میده :
Msg 207, Level 16, State 1, Procedure sp_RenameColumn, Line 15
Invalid column name 'کد پرسنلی'.

کدی که من زدم این هست:
USE [azar]
GO
/****** Object: StoredProcedure [dbo].[sp_RenameColumn] Script Date: 06/30/2013 15:09:36 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_RenameColumn]
AS
BEGIN
declare @h nvarchar(50)
declare @m varchar(50)

set @m = 'dbo.testtt'
set @h = (
select [COLUMN NAME] from (SELECT [name] AS [Column name]
FROM syscolumns
WHERE id = (SELECT id
FROM sysobjects
WHERE type = 'U'
AND [NAME] = 'testtt'))X
Where [کد پرسنلی] like N'کد پرسنلی'
)

declare @aa nvarchar(255)
set @aa = @m+@h

EXEC sp_rename @aa, 'Code', 'COLUMN';
END

hossein_h62
یک شنبه 09 تیر 1392, 14:50 عصر
خط 22 رو اشتباه زدید،
این کد رو بزنید :
USE [azar]
GO
/****** Object: StoredProcedure [dbo].[sp_RenameColumn] Script Date: 06/30/2013 15:09:36 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_RenameColumn]
AS
BEGIN
declare @h nvarchar(50)
declare @m varchar(50)

set @m = 'dbo.testtt'
set @h = (
select [COLUMN NAME] from (SELECT [name] AS [Column name]
FROM syscolumns
WHERE id = (SELECT id
FROM sysobjects
WHERE type = 'U'
AND [NAME] = 'testtt'))X
Where [Column name] like N'کد پرسنلی'
)

declare @aa nvarchar(255)
set @aa = @m+@h

EXEC sp_rename @aa, 'Code', 'COLUMN';
END

azadeh_1510
یک شنبه 09 تیر 1392, 15:10 عصر
دوست عزیز
دوباره برگشتیم سر نقطه اول همون پست شماره 4 رو که زحمت کشیده بودین منم همونو زده بودم که الان با این پست آخرتون یکی هست.منتها شما گفته بودین که "اسم فیلدی که در خط شماره 12 کوئری پست 4 میزنید مطابق اسم فیلدتون در جدول باشه." واسه همین من خط 12 رو از Where [Column name] like N'کد پرسنلی'
به Where [کد پرسنلی] like N'کد پرسنلی'
تغییر دادم.بعدش گفتین که نباید تغییرش میدادم.
حالا دوباره برگشتیم به مورد پست شماره 5 :

نقل قول: تعویض نام ستون

موقع ذخیره کردن SP مشکلی نداره اما موقع اجرای SP این پیام خطا رو میده:
Msg 15248, Level 11, State 1, Procedure sp_rename, Line 215
Either the parameter @objname is ambiguous or the claimed @objtype (COLUMN) is wrong.
:افسرده:حالا چیکار کنم؟

hossein_h62
یک شنبه 09 تیر 1392, 15:34 عصر
منظور من از تطابق نام فیلد قسمتی هست که بعد از Like قرار میگیره، حدس زدم ممکن نام فیلدتون با نامی که بعد از Like مینویسید فرق میکنه.(حتی یه space قبل یا بعد کلمه) این مورد رو کنترل کنید.