Varchar(255)到Varchar(MAX)

时间:2010-04-23 03:15:48

标签: sql types varchar

是否可以将SQL Server 2008数据库中的列类型从varchar(255)更改为varchar(MAX),而无需删除表并重新创建?

每次我尝试使用它时,SQL Server Management Studio都会抛出一个错误 - 但为了节省自己的头痛,我很高兴知道我是否可以在不必DROP和CREATE的情况下更改类型。

谢谢

3 个答案:

答案 0 :(得分:74)

您应该可以使用TSQL来完成它。

这样的东西
ALTER TABLE [table] ALTER COLUMN [column] VARCHAR(MAX)

答案 1 :(得分:12)

  

'不允许保存更改。该   你所做的改变需要   下面的表格将被删除   重新创建。你要么做了   更改为不能的表   重新创建或启用该选项   防止保存需要的更改   要重新创建的表。'选项   “防止储蓄变化”不是   启用..

这是SQL Server Management Studio 2008中的一个新“功能”,默认情况下已打开。每当您进行更大的更改时,SSMS只能通过创建一个新表来重新创建表,然后从旧表中移动数据 - 所有这些都在后台(这些更改包括重新排序列等)。

默认情况下,此选项处于关闭状态,因为如果您的表具有FK约束和内容,则重新执行该表的这种方式可能会失败。但你绝对可以打开这个功能!

alt text http://i42.tinypic.com/19pegj.png

它位于Tools > Options之下,一旦取消选中该选项,您就可以再次对表设计器中的表结构进行这些更改。

答案 2 :(得分:1)

请注意 与

之类的东西
ALTER TABLE [table] ALTER COLUMN [column] VARCHAR(MAX)

https://dba.stackexchange.com/questions/15007/change-length-of-varchar-on-live-prod-table

Martin Smith的answare:

如果你将它增加到varchar(100 - 8000)(即varchar(max))之外的其他任何东西,你通过TSQL而不是SSMS GUI

ALTER TABLE YourTable ALTER COLUMN YourCol varchar(200) [NOT] NULL
这样做,而不是改变NULL的列可为空性1}}到NOT NULL(在所有行都经过验证并且在某些情况下可能会从NOT NULL写入NULLSCH-M时会锁定表,这只是一个快速的元数据更改。可能需要等待表上的SCH-M锁定,但一旦获得该锁定,该更改将非常即时。 需要注意的一点是,在等待SET LOCK_TIMEOUT锁定期间,其他查询将被阻止,而不是在其前面跳过队列,因此您可能需要先考虑添加ALTER TABLE。 另请确保在NOT NULL语句中明确指定NULL,如果这是原始列​​状态,否则该列将更改为允许 [testng] [TestNG] Running: [testng] suite1 [testng] [testng] [testng] org.openqa.selenium.firefox.NotConnectedException: Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms. Firefox console output: [testng] Error: no display specified [testng] Error: no display specified [testng] [testng] at org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.start(NewProfileExtensionConnection.java:118) [testng] at org.openqa.selenium.firefox.FirefoxDriver.startClient(FirefoxDriver.java:246) [testng] at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:114) [testng] =============================================== [testng] suite1 [testng] at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:193) [testng] at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:186) [testng] at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:104) [testng] at test.webdriver.browser.FireFoxBrowser.invoke(FireFoxBrowser.java:20) [testng] at test.webdriver.SonnetElementBase.invokeBrowser(SonnetElementBase.java:125) [testng] Total tests run: 1, Failures: 1, Skips: 0 [testng] at scripts.RedBus.setup(RedBus.java:26) [testng] =============================================== [testng] at scripts.Driver.signup(Driver.java:44) [testng] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [testng] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [testng] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [testng] at java.lang.reflect.Method.invoke(Method.java:497) [testng] at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84) [testng] at org.testng.internal.Invoker.invokeMethod(Invoker.java:714) [testng] at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901) [testng] at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231) [testng] at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127) [testng] at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111) [testng] at org.testng.TestRunner.privateRun(TestRunner.java:767) [testng] at org.testng.TestRunner.run(TestRunner.java:617) [testng] at org.testng.SuiteRunner.runTest(SuiteRunner.java:334) [testng] at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329) [testng] at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291) [testng] at org.testng.SuiteRunner.run(SuiteRunner.java:240) [testng] at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) [testng] at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) [testng] at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224) [testng] at org.testng.TestNG.runSuitesLocally(TestNG.java:1149) [testng] at org.testng.TestNG.run(TestNG.java:1057) [testng] at org.testng.TestNG.privateMain(TestNG.java:1364) [testng] at org.testng.TestNG.main(TestNG.java:1333) [testng] [testng] The tests failed.`enter code here`